Necesitamos analizar los datos de tipo mixto, número, órdinal y nominal. Nos vamos a enfocar en clasificación no supervisada usando R CLUSTERING ALGORITHM: PARTITIONING AROUND MEDOIDS (PAM)
setwd("C:/Users/Pablo/Desktop/Machine_Learning_I/PRAC/Cluster")
df_mas <- read.csv ("kc_house_data.csv")
#set.seeds=737
df_mas <- sample_n(df_mas, size = 10000)
La distancia es una medida numérica de cuán separados están los individuos, es decir una métrica utilizada para medir la proximidad o similitud entre individuos;
La distancia de Gower se calcula como el promedio de las diferencias parciales entre individuos. Para cada tipo de variable, se usa una métrica de distancia particular que funciona bien para ese tipo y se escala para caer entre 0 y 1
Para las variables cuantitativa La Distancia de Manhattan Para las Variables Ordinales la Distancia un ajuste especial de la Manhattan despúes de haber sido ordenadas Para las Nominales primero se convierte en k columnas Binarias ( para cada categoria de cada variable norminal) y posteriormente se usa el coeficiente de Dice
El coeficiente de Dice [0,1] para medir la similitud entre 2 muestras
Se escala de la siguiente Manera Se define la distancia de Gower como d2ij = 1 − sij , donde sij = p1h=1 (1 − |xih − xjh|/Gh) + a + α p1 + (p2 − d) + p3 es el coeficiente de similaridad de Gower,
p1 es el numero de variables cuantitativas continuas, p2 es el numero de variables binarias, p3 es el numero de variables cualitativas(no binarias), a es el numero de coincidencias (1, 1) en las variables binarias, d es el numero de coincidencias (0, 0) en las variables binarias, α es el numero de coincidencias en las variables cualitativas (no binarias) y Gh es el rango (o recorrido) de la h-esima variable cuantitativa.
gower_dist <- daisy(df_mas, metric = "gower")
## Warning in daisy(df_mas, metric = "gower"): binary variable(s) 9 treated as
## interval scaled
gower_mat <- as.matrix(gower_dist)
df_mas[which(gower_mat == min(gower_mat[gower_mat != min(gower_mat)]),
arr.ind = TRUE)[1, ], ]
## id date price bedrooms bathrooms sqft_living sqft_lot
## 9755 125059178 7/22/2014 510000 6 4.5 3300 7480
## 2743 125059138 7/22/2014 510000 6 4.5 3300 7561
## floors waterfront view condition grade sqft_above sqft_basement
## 9755 2 0 0 3 8 3300 0
## 2743 2 0 0 3 8 3300 0
## yr_built yr_renovated zipcode lat long sqft_living15
## 9755 1980 0 98052 47.6796 -122.104 2470
## 2743 1980 0 98052 47.6795 -122.104 2470
## sqft_lot15
## 9755 7561
## 2743 7561
df_mas[which(gower_mat == max(gower_mat[gower_mat != max(gower_mat)]),
arr.ind = TRUE)[1, ], ]
## id date price bedrooms bathrooms sqft_living sqft_lot
## 8942 1697000370 3/25/2015 234000 3 1.0 1040 8122
## 5859 9808700762 6/11/2014 7060000 5 4.5 10040 37325
## floors waterfront view condition grade sqft_above sqft_basement
## 8942 1 0 0 5 7 1040 0
## 5859 2 1 2 3 11 7680 2360
## yr_built yr_renovated zipcode lat long sqft_living15
## 8942 1971 0 98198 47.3731 -122.312 1470
## 5859 1940 2001 98004 47.6500 -122.214 3930
## sqft_lot15
## 8942 8676
## 5859 25449
Una vez calculada la matriz de distancia emplearemos el algoritmo PAM, basado en una partición de medoids (El término medoids se refiere a un objeto dentro de un grupo para el cual la diferencia promedio entre este y todos los demás miembros del grupo es mínima, es decir el punto más centralmente ubicado del conjunto de datos), en cambio en el método K-means cada Cluster está representado por su centroide. Es un método muy similar a k-means, pero es mucho más robusto a la presencia de Outliers como es en nuestro caso. Es un procedimiento de agrupación iterativa que implica los siguientes pasos:
Elejir k entidades aleatorias para convertirse en los Medoids
Asignamos a cada entidad, en nuestro caso a cada “casa” el medoide más cercano basado en la distancia de Gower anteriormente calculada.
Para cada Cluster identificar la observación que produciría la distancia promedio más baja si fuera reasiganada como el Medoid, si fuera así hay que hacer de esta observación el nuevo Medoid. Si al menos un Medoid ha cambiado volvemos Step2, en caso contrario Step4
FIN
K Means intenta mininizar el ECM total K Medoids minimiza la suma de las diferencias entre los puntos etiquetados para estar en un grupo y un punto designado como el centro de ese grupo Mediod.
Silhouette, Validación y consistencia dentro de los datos.
Es una medida de cuan similar es objeto dentro del grupo de pertenencia y cuan disimilar con los otros grupos.
Varía entre -1 y 1. Un valor alto indica que un objeto está bien emparejado dentro de su grupo y mal con el resto. Un valor muy bajo o negativo implica una revisión del número de cluster al alza o a la baja
sil_width <- c(NA)
for(i in 2:10){
pam_fit <- pam(gower_dist, diss = TRUE, k = i)
sil_width[i] <- pam_fit$silinfo$avg.width
}
plot(1:10, sil_width,
xlab = "Numero de clusters",
ylab = "Silhouette")
lines(1:10, sil_width)
fviz_silhouette(pam_fit)
## cluster size ave.sil.width
## 1 1 1031 0.02
## 2 2 860 0.15
## 3 3 1107 0.01
## 4 4 906 0.05
## 5 5 1063 0.14
## 6 6 922 0.10
## 7 7 1058 0.12
## 8 8 1279 0.10
## 9 9 1041 0.10
## 10 10 733 0.03
Después de calcular el Silhouette para el algoritmo PAM vemos que 2 grupos producen el valor más alto. Aún asi nosotros seleccionamos 3 Cluster para dividir la dispersión del Trabajo y facilitar el entendimiento de los siguientes análisis.
set.seed=737
k <- 3
pam_fit <- pam(gower_dist, diss = TRUE, k)
pam_results <- df_mas %>%
mutate(cluster = pam_fit$clustering) %>%
group_by(cluster) %>%
do(the_summary = summary(.))
#frecuencia del número de casas en cada Clúster
ftable(pam_fit$clustering)
## 1 2 3
##
## 3660 3759 2581
#descriptivo en cada Clúster
pam_results$the_summary
## [[1]]
## id date price bedrooms
## Min. :1.000e+06 7/1/2014 : 40 Min. : 180500 Min. : 2.000
## 1st Qu.:2.323e+09 7/8/2014 : 29 1st Qu.: 420000 1st Qu.: 3.000
## Median :4.140e+09 4/9/2015 : 26 Median : 596250 Median : 4.000
## Mean :4.845e+09 10/28/2014: 25 Mean : 710156 Mean : 3.738
## 3rd Qu.:7.702e+09 4/21/2015 : 25 3rd Qu.: 825000 3rd Qu.: 4.000
## Max. :9.895e+09 4/27/2015 : 25 Max. :7060000 Max. :10.000
## (Other) :3490
## bathrooms sqft_living sqft_lot floors
## Min. :1.000 Min. : 950 Min. : 698 Min. :1.000
## 1st Qu.:2.500 1st Qu.: 2110 1st Qu.: 5000 1st Qu.:2.000
## Median :2.500 Median : 2630 Median : 7730 Median :2.000
## Mean :2.722 Mean : 2761 Mean : 19209 Mean :1.954
## 3rd Qu.:3.000 3rd Qu.: 3225 3rd Qu.: 12789 3rd Qu.:2.000
## Max. :7.500 Max. :10040 Max. :1024068 Max. :3.500
##
## waterfront view condition grade
## Min. :0.0000 Min. :0.0000 Min. :2.000 Min. : 6.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 8.000
## Median :0.0000 Median :0.0000 Median :3.000 Median : 8.000
## Mean :0.0123 Mean :0.3235 Mean :3.163 Mean : 8.603
## 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:3.000 3rd Qu.: 9.000
## Max. :1.0000 Max. :4.0000 Max. :5.000 Max. :13.000
##
## sqft_above sqft_basement yr_built yr_renovated
## Min. : 720 Min. : 0.0 Min. :1900 Min. : 0.00
## 1st Qu.:1989 1st Qu.: 0.0 1st Qu.:1987 1st Qu.: 0.00
## Median :2440 Median : 0.0 Median :1999 Median : 0.00
## Mean :2539 Mean : 222.0 Mean :1994 Mean : 58.45
## 3rd Qu.:2990 3rd Qu.: 146.2 3rd Qu.:2006 3rd Qu.: 0.00
## Max. :7880 Max. :3500.0 Max. :2015 Max. :2014.00
##
## zipcode lat long sqft_living15
## Min. :98001 Min. :47.16 Min. :-122.5 Min. : 720
## 1st Qu.:98029 1st Qu.:47.48 1st Qu.:-122.2 1st Qu.:1958
## Median :98052 Median :47.57 Median :-122.1 Median :2430
## Mean :98059 Mean :47.55 Mean :-122.1 Mean :2484
## 3rd Qu.:98075 3rd Qu.:47.66 3rd Qu.:-122.0 3rd Qu.:2900
## Max. :98199 Max. :47.78 Max. :-121.4 Max. :5790
##
## sqft_lot15 cluster
## Min. : 651 Min. :1
## 1st Qu.: 5100 1st Qu.:1
## Median : 7686 Median :1
## Mean : 15869 Mean :1
## 3rd Qu.: 11903 3rd Qu.:1
## Max. :871200 Max. :1
##
##
## [[2]]
## id date price bedrooms
## Min. :1.200e+06 6/23/2014: 29 Min. : 81000 Min. :1.00
## 1st Qu.:2.257e+09 6/25/2014: 29 1st Qu.: 327750 1st Qu.:2.00
## Median :4.019e+09 4/28/2015: 27 Median : 431500 Median :3.00
## Mean :4.581e+09 4/2/2015 : 26 Mean : 468559 Mean :3.04
## 3rd Qu.:7.199e+09 4/27/2015: 26 3rd Qu.: 567750 3rd Qu.:4.00
## Max. :9.842e+09 3/4/2015 : 25 Max. :2300000 Max. :9.00
## (Other) :3597
## bathrooms sqft_living sqft_lot floors
## Min. :0.500 Min. : 380 Min. : 520 Min. :1.000
## 1st Qu.:1.000 1st Qu.:1180 1st Qu.: 4080 1st Qu.:1.000
## Median :1.750 Median :1510 Median : 6000 Median :1.000
## Mean :1.704 Mean :1613 Mean : 7672 Mean :1.307
## 3rd Qu.:2.000 3rd Qu.:1960 3rd Qu.: 8218 3rd Qu.:1.500
## Max. :4.500 Max. :5770 Max. :368517 Max. :3.500
##
## waterfront view condition grade
## Min. :0.000000 Min. :0.0000 Min. :1.000 Min. : 4.000
## 1st Qu.:0.000000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 7.000
## Median :0.000000 Median :0.0000 Median :3.000 Median : 7.000
## Mean :0.003724 Mean :0.1977 Mean :3.411 Mean : 7.089
## 3rd Qu.:0.000000 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.: 8.000
## Max. :1.000000 Max. :4.0000 Max. :5.000 Max. :11.000
##
## sqft_above sqft_basement yr_built yr_renovated
## Min. : 380 Min. : 0 Min. :1900 Min. : 0.0
## 1st Qu.:1000 1st Qu.: 0 1st Qu.:1928 1st Qu.: 0.0
## Median :1230 Median : 100 Median :1950 Median : 0.0
## Mean :1279 Mean : 334 Mean :1951 Mean : 108.3
## 3rd Qu.:1480 3rd Qu.: 660 3rd Qu.:1966 3rd Qu.: 0.0
## Max. :4320 Max. :2610 Max. :2015 Max. :2015.0
##
## zipcode lat long sqft_living15
## Min. :98004 Min. :47.34 Min. :-122.5 Min. : 460
## 1st Qu.:98107 1st Qu.:47.55 1st Qu.:-122.4 1st Qu.:1330
## Median :98118 Median :47.66 Median :-122.3 Median :1550
## Mean :98123 Mean :47.63 Mean :-122.3 Mean :1622
## 3rd Qu.:98144 3rd Qu.:47.70 3rd Qu.:-122.3 3rd Qu.:1842
## Max. :98199 Max. :47.78 Max. :-121.4 Max. :4950
##
## sqft_lot15 cluster
## Min. : 659 Min. :2
## 1st Qu.: 4120 1st Qu.:2
## Median : 6000 Median :2
## Mean : 6916 Mean :2
## 3rd Qu.: 8100 3rd Qu.:2
## Max. :221442 Max. :2
##
##
## [[3]]
## id date price bedrooms
## Min. :7.200e+06 9/29/2014: 24 Min. : 86500 Min. :1.000
## 1st Qu.:1.821e+09 12/2/2014: 19 1st Qu.: 250000 1st Qu.:3.000
## Median :3.330e+09 6/3/2014 : 19 Median : 320000 Median :3.000
## Mean :4.129e+09 8/26/2014: 19 Mean : 387355 Mean :3.301
## 3rd Qu.:6.752e+09 4/14/2015: 18 3rd Qu.: 472500 3rd Qu.:4.000
## Max. :9.836e+09 6/25/2014: 18 Max. :3070000 Max. :8.000
## (Other) :2464
## bathrooms sqft_living sqft_lot floors
## Min. :0.75 Min. : 460 Min. : 1500 Min. :1.000
## 1st Qu.:1.50 1st Qu.:1370 1st Qu.: 7700 1st Qu.:1.000
## Median :1.75 Median :1690 Median : 9491 Median :1.000
## Mean :1.85 Mean :1784 Mean : 21890 Mean :1.101
## 3rd Qu.:2.25 3rd Qu.:2110 3rd Qu.: 13187 3rd Qu.:1.000
## Max. :4.00 Max. :5461 Max. :1651359 Max. :2.500
##
## waterfront view condition grade
## Min. :0.000000 Min. :0.0000 Min. :1.000 Min. : 3.000
## 1st Qu.:0.000000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 7.000
## Median :0.000000 Median :0.0000 Median :4.000 Median : 7.000
## Mean :0.005812 Mean :0.1577 Mean :3.766 Mean : 7.148
## 3rd Qu.:0.000000 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.: 8.000
## Max. :1.000000 Max. :4.0000 Max. :5.000 Max. :11.000
##
## sqft_above sqft_basement yr_built yr_renovated
## Min. : 460 Min. : 0.0 Min. :1900 Min. : 0.00
## 1st Qu.:1170 1st Qu.: 0.0 1st Qu.:1961 1st Qu.: 0.00
## Median :1400 Median : 0.0 Median :1969 Median : 0.00
## Mean :1455 Mean : 328.3 Mean :1969 Mean : 52.53
## 3rd Qu.:1670 3rd Qu.: 620.0 3rd Qu.:1979 3rd Qu.: 0.00
## Max. :4110 Max. :2720.0 Max. :2014 Max. :2015.00
##
## zipcode lat long sqft_living15
## Min. :98001 Min. :47.18 Min. :-122.5 Min. : 800
## 1st Qu.:98011 1st Qu.:47.34 1st Qu.:-122.2 1st Qu.:1470
## Median :98032 Median :47.45 Median :-122.2 Median :1750
## Mean :98038 Mean :47.46 Mean :-122.2 Mean :1814
## 3rd Qu.:98055 3rd Qu.:47.58 3rd Qu.:-122.1 3rd Qu.:2080
## Max. :98199 Max. :47.78 Max. :-121.3 Max. :4010
##
## sqft_lot15 cluster
## Min. : 1863 Min. :3
## 1st Qu.: 7696 1st Qu.:3
## Median : 9018 Median :3
## Mean : 17595 Mean :3
## 3rd Qu.: 11700 3rd Qu.:3
## Max. :425581 Max. :3
##
Nº de Observaciones 7.255 Precio medio 498.294
Nº de habitaciones 3.111
Nº de Banyos 1.663 Nº de Plantas 1.22 Metros cuadrado 1.679 Vistas al mar 0.00634
Visitas 0.2571 Condicion Media 3.47 Grado Medio 7.065 Anyo Contruccion 1944
Nº de Observaciones 5.687 Precio medio 412.375
Nº de habitaciones 3.345 Nº de Banyos 1.851 Nº de Plantas 1.068 Metros cuadrado 1.808 Vistas al mar 0.006682 Visitas 0.1721 Condicion Media 3.775 Grado Medio 7.19 Anyo Contruccion 1968
Nº de Observaciones 8.655 Precio medio 659.559
Nº de habitaciones 3.611 Nº de Banyos 2.669 Nº de Plantas 2.004 Metros cuadrado 2.014 Vistas al mar 0.00912 Visitas 0.256 Condicion Media 3.119
Grado Medio 8.463 Anyo Contruccion 1996
El PCA es un algoritmo lienal, no podrá interpretar relaciones complejas polinómicas entre los items del dataset. Vemos que en los dos primeros componentes recogemos el 50,35% de la variabilidad Seleccionando aquellos componentes con autovalor mayor a 1,los Cuatro Primeros, explican el 71,5% de la variabilidad total.
data<- subset(df_mas, select=c("price", "bedrooms","bathrooms","sqft_living","sqft_lot","floors","waterfront", "view","condition","grade","sqft_above","sqft_basement","sqft_living15","sqft_lot15"))
pca<- prcomp(data, scale=TRUE)
summary (pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.2910 1.3312 1.2904 1.13022 0.91998 0.84123
## Proportion of Variance 0.3749 0.1266 0.1189 0.09124 0.06045 0.05055
## Cumulative Proportion 0.3749 0.5015 0.6204 0.71166 0.77211 0.82266
## PC7 PC8 PC9 PC10 PC11 PC12
## Standard deviation 0.76331 0.73840 0.59421 0.5396 0.51350 0.48180
## Proportion of Variance 0.04162 0.03895 0.02522 0.0208 0.01883 0.01658
## Cumulative Proportion 0.86428 0.90322 0.92845 0.9492 0.96808 0.98466
## PC13 PC14
## Standard deviation 0.46342 3.114e-15
## Proportion of Variance 0.01534 0.000e+00
## Cumulative Proportion 1.00000 1.000e+00
fviz_eig(pca)
A través de los Scores de cada variable dentro del componente Principal podemos libremente afirmar y con fines explicativos;
##PC1
Precio/m2 38% de la variabilidad
##PC2
Espacio Sotano 12% de la variabilidad
##PC3
Espacio Parcela 12% de la varibilidad
##PC4
Vistas al Mar 9% de la variabilidad
pca
## Standard deviations (1, .., p=14):
## [1] 2.290991e+00 1.331187e+00 1.290405e+00 1.130220e+00 9.199786e-01
## [6] 8.412345e-01 7.633061e-01 7.384005e-01 5.942140e-01 5.396177e-01
## [11] 5.135018e-01 4.818037e-01 4.634196e-01 3.114364e-15
##
## Rotation (n x k) = (14 x 14):
## PC1 PC2 PC3 PC4
## price -0.33437666 0.136200434 0.15754206 -0.145214175
## bedrooms -0.25360376 -0.008951054 0.11765715 0.410796012
## bathrooms -0.35506324 -0.124097590 0.03566249 0.119182239
## sqft_living -0.41177963 0.046776713 0.04407581 0.145325770
## sqft_lot -0.08446621 0.359402810 -0.58842445 0.014814058
## floors -0.21228019 -0.435090062 -0.13231520 -0.221861499
## waterfront -0.08355856 0.261792858 0.17963733 -0.606375062
## view -0.16230955 0.339793141 0.21154546 -0.432938973
## condition 0.05365893 0.337596013 0.18978316 0.258824734
## grade -0.37464321 -0.104095051 -0.01158452 -0.054282252
## sqft_above -0.38567597 -0.174379423 -0.13295422 -0.009395016
## sqft_basement -0.12849054 0.419799267 0.33732766 0.315571053
## sqft_living15 -0.35573646 0.015120906 -0.02998692 0.012156600
## sqft_lot15 -0.08763647 0.360051842 -0.59062109 0.022554361
## PC5 PC6 PC7 PC8 PC9
## price 0.15722954 -0.233509743 0.01094550 -0.28856640 0.66665655
## bedrooms -0.14040351 0.583155287 -0.26794213 0.34984149 0.27830913
## bathrooms -0.10364249 0.227229809 0.30173635 -0.11440406 -0.31697607
## sqft_living -0.04046040 -0.035116699 -0.06634781 -0.05830088 -0.02172146
## sqft_lot -0.03635758 0.098473373 0.10263903 -0.02142740 0.23985261
## floors 0.11820546 0.291318368 0.56354052 -0.07281970 -0.01622483
## waterfront -0.03027099 0.481649908 -0.34086905 -0.36128474 -0.18458396
## view -0.06165564 -0.075787371 0.30771474 0.71326486 0.02104456
## condition 0.83932746 0.160014900 0.15775222 -0.02227973 -0.14309820
## grade 0.07924099 -0.278153528 0.03337431 -0.12613959 -0.01325816
## sqft_above 0.17903234 0.006421887 -0.23939760 0.09085387 0.04460750
## sqft_basement -0.41548285 -0.083965054 0.30847943 -0.28832445 -0.12740054
## sqft_living15 0.08255872 -0.328847380 -0.33723466 0.15472156 -0.46353475
## sqft_lot15 -0.03050439 0.045129407 0.03807898 -0.03295548 -0.17641636
## PC10 PC11 PC12 PC13
## price -0.17443728 0.157388629 0.053394703 0.39826529
## bedrooms -0.18542080 -0.093020994 -0.269383107 0.07737021
## bathrooms 0.43220150 0.483388458 -0.046443056 0.39172959
## sqft_living 0.03442709 0.004763123 0.406501288 -0.37614495
## sqft_lot 0.50716484 -0.416607241 0.001812372 0.08312145
## floors -0.34868534 -0.383294273 0.091052238 0.01160418
## waterfront 0.02619695 -0.067218596 -0.049638751 -0.05622262
## view 0.03901072 0.086261206 0.010059685 -0.05934170
## condition 0.02435741 -0.035056398 -0.025513698 -0.04164100
## grade 0.09608225 -0.031649595 -0.756670313 -0.40260790
## sqft_above 0.11244990 0.133704718 0.397728718 -0.34108781
## sqft_basement -0.13820694 -0.238532477 0.095279259 -0.13819388
## sqft_living15 -0.14516487 -0.396689847 0.015835947 0.47539720
## sqft_lot15 -0.55096060 0.407535546 -0.074863451 -0.03830441
## PC14
## price -1.835619e-15
## bedrooms -3.136880e-17
## bathrooms -2.748086e-16
## sqft_living -6.972144e-01
## sqft_lot 1.065606e-16
## floors -2.009400e-16
## waterfront 7.721003e-17
## view -6.776113e-17
## condition -3.587282e-17
## grade 6.020812e-16
## sqft_above 6.311739e-01
## sqft_basement 3.398699e-01
## sqft_living15 3.077678e-17
## sqft_lot15 -6.984290e-17
Visualizaremos nuestros 3 Clústeres dentro del plano PC1 y PC2, Observamos que tenemos problemas los valores extremos por un lado y por otro la gran partes de los items se nos acumulan muy próximos lo cual no nos facilita la comprensión de los Grupos.
Planteamos nuesvas alternativas al entender que el PCA es insuficiente para interpretar nuestros Clusters
#join pca data y df cluster
pam_fit$clustering <- as.character(pam_fit$clustering)
pca_data <- data.frame(pca$x, cluster=pam_fit$clustering)
ggplot(pca_data, aes(x=PC1, y=PC2, color=cluster)) + geom_point()
Algoritmo de reducción de dimensionalidad no lineal, encuentra patrones en los datos mediante la identificación de grupos observados basados en la similitud de puntos de datos con múltiples características.
Esta técnica permite utilizar la métrica anteiormente creada, la Distancia de Gower, en nuestro caso se muestran los tres grupos que seleccionamos anteriorenteme con el algortimo PAM.
Asigna los datos multidimensionales creados en la Distancia de Gower anteriormente calculada a un espacio dimensional menor.
Muy útil para el “crowding problem” que implica “la maldición de la dimensión” y básicamente en nuestro caso afecta ya que al aumentar el número de dimensiones la distancia al vecino más próximo aumenta.
Comienza convirtiendo la distancia, nuestro caso Gower, entre los puntos de datos en medidas de probabilidad condicionales que representan similtud entre los datos. Función Gaussiana, probabilidad alta y probabilidad Baja Hay que prestar atención a las colas que son estrechas y pueden acumular mucha relación de puntos.
Representando la distribución de Probabilidad. La idea intuitiva es realizar asignaciones de baja dimensión que representen distribuciones de probabilidad similares, aquí nos podemos encontrar con “crowding problem” debido a las “colas cortas” de las distribuciones Gaussianas. Para subsanar este problema y que los puntos tengan una “cola más larga” la t-sne usa uns distribución T-stundent con un grado de libertad. La optimización de esta distribución t-student se realiza mediante una función Gradiente Descendiente que intuitivamenete representa la fuerza y la atracción-repulsión entre dos puntos. Gradiente positivo implica atracción y al contrario. Este “push-and-pull” hace que los puntos se asienten en espacio de baja dimensionalidad.
Las t-snes no tienen parámetros y optimizan directamente a través de la función de Coste Gradiente que es No Convexa y puede darnos problemas con los mínimos locales. Existen funciones para corregir este crecimiento de la función Gradiente sobre todo al comienzo del algoritmo. Importante el concepto de vecino estocásticos lo cual implica que no está cerrada la frontera de los puntos que son vecinos contra los puntos que no lo son permitiendo al algotimo tener en cuenta la estructura local como la global.( esto lo realizaremos con el parámetro perplexity)
En la siguiente visualización aparecen los 3 clúster dentro los ejes X e Y El número de dimensiones por defecto es 2
Perplexity es el parámetro que usamos para equilibrar el aspecto local y global de los datos, es en cierta medida determinar de forma supuesta cuanto es el número de vecinos quye tendría cada item ( en nuestro ejemplo casa) por defecto es 20, si lo concentramos mucho o lo dispersamos mucho
tsne_obj <- Rtsne(gower_dist,perplexity = 20, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(cluster = factor(pam_fit$clustering))
ggplot(aes(x = X, y = Y), data = tsne_data) + geom_point(aes(color = cluster))
#join tsne data y df original
df_join<-cbind(tsne_data,df_mas)
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~floors, size = ~price)
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
tsne_obj <- Rtsne(gower_dist,perplexity = 50, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(cluster = factor(pam_fit$clustering))
ggplot(aes(x = X, y = Y), data = tsne_data) +
geom_point(aes(color = cluster))
#join tsne data y df original
df_join<-cbind(tsne_data,df_mas)
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~condition, size = ~sqft_living )
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
Observamos en esta representación que existen grupos mucho más identificables y detallados que en la representación PCA.
tsne_obj <- Rtsne(gower_dist,perplexity = 80, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(cluster = factor(pam_fit$clustering))
ggplot(aes(x = X, y = Y), data = tsne_data) +
geom_point(aes(color = cluster))
#join tsne data y df original
df_join<-cbind(tsne_data,df_mas)
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~yr_built, size = ~sqft_living )
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
El objeto tsne_obj$Y contiene las coordenadas X-Y para cada caso de entrada.
Agrupaciones de Clusters anidados de forma Aglomerativa, cada observación comienza en su propio grupo, y los pares de grupos se van fusionando a medida que uno se mueve hacia arriba en la jerarquía. El link Criteria que emplearemos será el de Ward que minimizala suma de diferencias entre los Clusters.
cluster_hierarchical=hclust(dist(tsne_obj$Y), method = "ward.D")
plot(cluster_hierarchical, cex = 0.6, hang = -1)
df_join$hclust = factor(cutree(cluster_hierarchical, 3))
ggplot(aes(x = X, y = Y), data = df_join) +
geom_point(aes(color = hclust))
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~yr_built, size = ~sqft_living )
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
#frecuencia del número de casas en cada Clúster
ftable(df_join$hclust)
## 1 2 3
##
## 4288 2993 2719
#descriptivo en cada Clúster
by(df_join, df_join$hclust, summary)
## df_join$hclust: 1
## X Y cluster id
## Min. :-2.513 Min. :-23.366 1: 758 Min. :1.200e+06
## 1st Qu.: 8.081 1st Qu.: -2.615 2:3370 1st Qu.:2.159e+09
## Median :13.145 Median : 10.107 3: 160 Median :4.023e+09
## Mean :13.485 Mean : 6.618 Mean :4.562e+09
## 3rd Qu.:17.766 3rd Qu.: 17.177 3rd Qu.:7.148e+09
## Max. :33.520 Max. : 27.810 Max. :9.842e+09
##
## date price bedrooms bathrooms
## 6/23/2014: 33 Min. : 81000 Min. :1.000 Min. :0.500
## 6/25/2014: 33 1st Qu.: 340000 1st Qu.:3.000 1st Qu.:1.000
## 3/4/2015 : 28 Median : 465000 Median :3.000 Median :1.750
## 4/27/2015: 28 Mean : 557091 Mean :3.175 Mean :1.924
## 4/8/2015 : 28 3rd Qu.: 646375 3rd Qu.:4.000 3rd Qu.:2.500
## 5/20/2014: 28 Max. :7060000 Max. :9.000 Max. :7.500
## (Other) :4110
## sqft_living sqft_lot floors waterfront
## Min. : 380 Min. : 520 Min. :1.000 Min. :0.00000
## 1st Qu.: 1260 1st Qu.: 4000 1st Qu.:1.000 1st Qu.:0.00000
## Median : 1650 Median : 5750 Median :1.000 Median :0.00000
## Mean : 1838 Mean : 7583 Mean :1.465 Mean :0.01702
## 3rd Qu.: 2230 3rd Qu.: 8100 3rd Qu.:2.000 3rd Qu.:0.00000
## Max. :10040 Max. :505166 Max. :3.500 Max. :1.00000
##
## view condition grade sqft_above
## Min. :0.0000 Min. :1.000 Min. : 4.000 Min. : 380
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 7.000 1st Qu.:1040
## Median :0.0000 Median :3.000 Median : 7.000 Median :1320
## Mean :0.3403 Mean :3.434 Mean : 7.386 Mean :1473
## 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.: 8.000 3rd Qu.:1700
## Max. :4.0000 Max. :5.000 Max. :13.000 Max. :7880
##
## sqft_basement yr_built yr_renovated zipcode
## Min. : 0.0 Min. :1900 Min. : 0.0 Min. :98002
## 1st Qu.: 0.0 1st Qu.:1929 1st Qu.: 0.0 1st Qu.:98112
## Median : 170.0 Median :1951 Median : 0.0 Median :98119
## Mean : 365.1 Mean :1956 Mean : 172.3 Mean :98129
## 3rd Qu.: 700.0 3rd Qu.:1978 3rd Qu.: 0.0 3rd Qu.:98146
## Max. :3500.0 Max. :2015 Max. :2015.0 Max. :98199
##
## lat long sqft_living15 sqft_lot15 hclust
## Min. :47.20 Min. :-122.5 Min. : 460 Min. : 651 1:4288
## 1st Qu.:47.54 1st Qu.:-122.4 1st Qu.:1360 1st Qu.: 4000 2: 0
## Median :47.64 Median :-122.3 Median :1600 Median : 5760 3: 0
## Mean :47.61 Mean :-122.3 Mean :1715 Mean : 6962
## 3rd Qu.:47.69 3rd Qu.:-122.3 3rd Qu.:1950 3rd Qu.: 8000
## Max. :47.78 Max. :-121.8 Max. :4950 Max. :222591
##
## --------------------------------------------------------
## df_join$hclust: 2
## X Y cluster id
## Min. :-25.432 Min. :-27.5531 1:2726 Min. :1.000e+06
## 1st Qu.:-15.371 1st Qu.:-19.9121 2: 41 1st Qu.:2.216e+09
## Median : -8.394 Median :-14.8267 3: 226 Median :4.055e+09
## Mean : -8.724 Mean :-15.2919 Mean :4.776e+09
## 3rd Qu.: -2.359 3rd Qu.:-11.0963 3rd Qu.:7.769e+09
## Max. : 7.015 Max. : -0.8786 Max. :9.895e+09
##
## date price bedrooms bathrooms
## 7/24/2014 : 25 Min. : 139500 Min. : 1.000 Min. :1.000
## 7/1/2014 : 24 1st Qu.: 380000 1st Qu.: 3.000 1st Qu.:2.500
## 7/29/2014 : 24 Median : 546200 Median : 4.000 Median :2.500
## 10/28/2014: 23 Mean : 626826 Mean : 3.683 Mean :2.643
## 7/8/2014 : 22 3rd Qu.: 760000 3rd Qu.: 4.000 3rd Qu.:2.750
## 4/21/2015 : 21 Max. :5570000 Max. :10.000 Max. :6.000
## (Other) :2854
## sqft_living sqft_lot floors waterfront
## Min. : 810 Min. : 698 Min. :1.000 Min. :0
## 1st Qu.:2040 1st Qu.: 5450 1st Qu.:2.000 1st Qu.:0
## Median :2560 Median : 8025 Median :2.000 Median :0
## Mean :2684 Mean : 20805 Mean :1.942 Mean :0
## 3rd Qu.:3170 3rd Qu.: 12793 3rd Qu.:2.000 3rd Qu.:0
## Max. :9200 Max. :1024068 Max. :3.000 Max. :0
##
## view condition grade sqft_above
## Min. :0.0000 Min. :2.00 Min. : 6.000 Min. : 810
## 1st Qu.:0.0000 1st Qu.:3.00 1st Qu.: 8.000 1st Qu.:1960
## Median :0.0000 Median :3.00 Median : 8.000 Median :2450
## Mean :0.2295 Mean :3.18 Mean : 8.465 Mean :2541
## 3rd Qu.:0.0000 3rd Qu.:3.00 3rd Qu.: 9.000 3rd Qu.:3010
## Max. :4.0000 Max. :5.00 Max. :13.000 Max. :7320
##
## sqft_basement yr_built yr_renovated zipcode
## Min. : 0.0 Min. :1924 Min. : 0.0000 Min. :98001
## 1st Qu.: 0.0 1st Qu.:1989 1st Qu.: 0.0000 1st Qu.:98027
## Median : 0.0 Median :1999 Median : 0.0000 Median :98040
## Mean : 142.9 Mean :1996 Mean : 0.6726 Mean :98042
## 3rd Qu.: 0.0 3rd Qu.:2005 3rd Qu.: 0.0000 3rd Qu.:98059
## Max. :3000.0 Max. :2015 Max. :2013.0000 Max. :98177
##
## lat long sqft_living15 sqft_lot15 hclust
## Min. :47.16 Min. :-122.5 Min. : 890 Min. : 748 1: 0
## 1st Qu.:47.40 1st Qu.:-122.2 1st Qu.:2000 1st Qu.: 5450 2:2993
## Median :47.55 Median :-122.1 Median :2440 Median : 7923 3: 0
## Mean :47.53 Mean :-122.1 Mean :2512 Mean : 16836
## 3rd Qu.:47.65 3rd Qu.:-122.0 3rd Qu.:2920 3rd Qu.: 11876
## Max. :47.78 Max. :-121.4 Max. :5790 Max. :871200
##
## --------------------------------------------------------
## df_join$hclust: 3
## X Y cluster id
## Min. :-25.949 Min. :-6.723 1: 176 Min. :7.200e+06
## 1st Qu.:-17.944 1st Qu.: 2.812 2: 348 1st Qu.:1.921e+09
## Median :-11.573 Median : 6.566 3:2195 Median :3.577e+09
## Mean :-11.664 Mean : 6.396 Mean :4.324e+09
## 3rd Qu.: -5.548 3rd Qu.:10.028 3rd Qu.:7.199e+09
## Max. : 2.245 Max. :19.203 Max. :9.836e+09
##
## date price bedrooms bathrooms
## 4/28/2015: 22 Min. : 85000 Min. :1.000 Min. :0.750
## 4/14/2015: 20 1st Qu.: 259975 1st Qu.:3.000 1st Qu.:1.500
## 6/25/2014: 20 Median : 350000 Median :3.000 Median :1.750
## 7/16/2014: 20 Mean : 402849 Mean :3.307 Mean :1.832
## 7/8/2014 : 20 3rd Qu.: 495000 3rd Qu.:4.000 3rd Qu.:2.250
## 3/11/2015: 19 Max. :2850000 Max. :8.000 Max. :4.000
## (Other) :2598
## sqft_living sqft_lot floors waterfront
## Min. : 460 Min. : 1500 Min. :1.000 Min. :0.0000000
## 1st Qu.:1340 1st Qu.: 7808 1st Qu.:1.000 1st Qu.:0.0000000
## Median :1700 Median : 9648 Median :1.000 Median :0.0000000
## Mean :1786 Mean : 22382 Mean :1.035 Mean :0.0003678
## 3rd Qu.:2130 3rd Qu.: 13996 3rd Qu.:1.000 3rd Qu.:0.0000000
## Max. :5461 Max. :1651359 Max. :2.500 Max. :1.0000000
##
## view condition grade sqft_above
## Min. :0.00000 Min. :1.000 Min. : 3.000 Min. : 460
## 1st Qu.:0.00000 1st Qu.:3.000 1st Qu.: 7.000 1st Qu.:1160
## Median :0.00000 Median :4.000 Median : 7.000 Median :1370
## Mean :0.06914 Mean :3.631 Mean : 7.201 Mean :1447
## 3rd Qu.:0.00000 3rd Qu.:4.000 3rd Qu.: 8.000 3rd Qu.:1650
## Max. :4.00000 Max. :5.000 Max. :11.000 Max. :4040
##
## sqft_basement yr_built yr_renovated zipcode
## Min. : 0 Min. :1900 Min. : 0.000 Min. :98001
## 1st Qu.: 0 1st Qu.:1961 1st Qu.: 0.000 1st Qu.:98014
## Median : 0 Median :1969 Median : 0.000 Median :98033
## Mean : 339 Mean :1969 Mean : 5.833 Mean :98035
## 3rd Qu.: 630 3rd Qu.:1979 3rd Qu.: 0.000 3rd Qu.:98055
## Max. :2720 Max. :2014 Max. :2009.000 Max. :98092
##
## lat long sqft_living15 sqft_lot15 hclust
## Min. :47.18 Min. :-122.5 Min. : 800 Min. : 1848 1: 0
## 1st Qu.:47.36 1st Qu.:-122.2 1st Qu.:1480 1st Qu.: 7820 2: 0
## Median :47.49 Median :-122.2 Median :1760 Median : 9450 3:2719
## Mean :47.50 Mean :-122.2 Mean :1838 Mean : 18112
## 3rd Qu.:47.64 3rd Qu.:-122.1 3rd Qu.:2115 3rd Qu.: 12205
## Max. :47.78 Max. :-121.3 Max. :4270 Max. :425581
##
write.csv(df_join,file="cluster.csv")